package com.liuyjy.redis.util;

import org.redisson.api.RLock;
import org.springframework.data.redis.core.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * @author: liuyjy
 * @Description: redis封装方法
 * @date: 2022/2/10 16:34
 */
public interface RedissonCache {

    /**
     * 根据给定的键获取一个Redisson分布式锁对象
     * 此方法不涉及锁的获取与释放，仅返回锁对象，用于后续的操作
     * rLock.tryLock 非阻塞
     * rLock.lock() 阻塞
     * rLock.unlock() 释放锁
     *
     * @param k    锁的唯一标识符，通常与业务相关，用于区分不同的锁
     * @param subK 子键，用于进一步细化锁的粒度
     * @return RLock锁对象，用于执行后续的锁操作
     * @throws IllegalStateException 如果键或子键为空，则抛出此异常
     */
    RLock getRLock(String k, String subK);
    /**
     * 根据给定的键获取一个Redisson分布式锁对象
     * 此方法不涉及锁的获取与释放，仅返回锁对象，用于后续的操作
     * rLock.tryLock 非阻塞
     * rLock.lock() 阻塞
     * rLock.unlock() 释放锁
     *
     * @param key 锁的唯一标识符，通常与业务相关，用于区分不同的锁
     * @return RLock锁对象，用于执行后续的锁操作
     */
    RLock getRLock(String key);
}
